﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Media;
using System.Collections.ObjectModel;
using System.Data;
using System.Windows.Media.Imaging;
using System.ComponentModel;
using System.Diagnostics;
using System.Windows.Controls;
using System.Globalization;
using produccion.vistamodelo;

namespace produccion.modelo
{
    public class MReporteProcProd:ObservableObject
    {

        public class opcion : ObservableObject
        {
            private string _strNombre;
            public string strNombre
            {
                get {return _strNombre;}
                set { _strNombre = value; RaisePropertyChangedEvent("strNombre"); }
            }

            private string _strCodigo;
            public string strCodigo
            {
                get { return _strCodigo; }
                set { _strCodigo = value; RaisePropertyChangedEvent("strCodigo"); }

            }

            private Brush _color = (Brush)new BrushConverter().ConvertFrom("#FFD7D7D7");
            public Brush color
            {
                get { return _color; }
                set { _color = value; RaisePropertyChangedEvent("color"); }
            }

            private int _numConsecutivo;
            public int numConsecutivo
            {
                get { return _numConsecutivo; }
                set { _numConsecutivo = value; RaisePropertyChangedEvent("numConsecutivo"); }
            }

            private string _strPreasignado="S";
            public string strPreasignado
            {
                get { return _strPreasignado; }
                set { _strPreasignado = value; RaisePropertyChangedEvent("strPreasignado"); }
            }

        }

        public class encabezado : ObservableObject, IDataErrorInfo
        {
               
            private opcion _selOpcion = new opcion();
            public opcion selOpcion
            {
                get { return _selOpcion; }
                set { _selOpcion = value; RaisePropertyChangedEvent("selOpcion"); }
            }

            private int _numSemana;
            public int numSemana
            {
                get { return _numSemana; }
                set { _numSemana = value; RaisePropertyChangedEvent("numSemana"); }
            }

            private DateTime _dtmDesde;
            public DateTime dtmDesde
            {
                get { return _dtmDesde; }
                set { _dtmDesde = value; RaisePropertyChangedEvent("dtmDesde"); }
            }

            private DateTime _dtmHasta;
            public DateTime dtmHasta
            {
                get { return _dtmHasta; }
                set { _dtmHasta = value; RaisePropertyChangedEvent("dtmHasta"); }
            }

            private DateTime _dtmFecha=DateTime.Today;
            public DateTime dtmFecha
            {
                get { return _dtmFecha; }
                set { _dtmFecha = value; RaisePropertyChangedEvent("dtmFecha"); }
            }

            private string _strNumeroOrden="";
            public string strNumeroOrden
            {
                get { return _strNumeroOrden; }
                set { _strNumeroOrden = value; RaisePropertyChangedEvent("strNumeroOrden"); }
            }

            private string _strReferencia="";
            public string strReferencia
            {
                get { return _strReferencia; }
                set { _strReferencia = value; RaisePropertyChangedEvent("strReferencia"); }
            }

            private string _strNombreReferencia;
            public string strNombreReferencia
            {
                get { return _strNombreReferencia; }
                set { _strNombreReferencia = value; RaisePropertyChangedEvent("strNombreReferencia"); }
            }

            private VMvisorFotoReferencia _visorFotoReferencia = new VMvisorFotoReferencia();
            public VMvisorFotoReferencia visorFotoReferencia
            {
                get { return _visorFotoReferencia; }
                set { _visorFotoReferencia = value; RaisePropertyChangedEvent("visorFotoReferencia"); }
            }

            private string _strColor;
            public string strColor
            {
                get { return strColor; }
                set
                {
                    _strColor = value;
                    visorFotoReferencia.strCodigo = _strReferencia;
                    visorFotoReferencia.strColor = _strColor;
                }
            }

            private string _strNombreColor;
            public string strNombreColor
            {
                get { return _strNombreColor; }
                set { _strNombreColor = value; RaisePropertyChangedEvent("strNombreColor"); }
            }

            private int _numTotalOrden;
            public int numTotalOrden
            {
                get { return _numTotalOrden; }
                set { _numTotalOrden = value; RaisePropertyChangedEvent("numTotalOrden"); }
            }

            private int _numTotalReportado;
            public int numTotalReportado
            {
                get { return _numTotalReportado; }
                set { _numTotalReportado = value; RaisePropertyChangedEvent("numTotalReportado"); }
            }

            private int _numTotalPendiente;
            public int numTotalPendiente
            {
                get { return _numTotalPendiente; }
                set { _numTotalPendiente = value; RaisePropertyChangedEvent("numTotalPendiente"); }
            }

            private int _numTotalaReportar;
            public int numTotalaReportar
            {
                get { return _numTotalaReportar; }
                set { _numTotalaReportar = value; RaisePropertyChangedEvent("numTotalaReportar"); }
            }

            private ObservableCollection<operario> _detOperario = new ObservableCollection<operario>();
            public ObservableCollection<operario> detOperario
            {
                get { return _detOperario; }
                set { _detOperario = value; RaisePropertyChangedEvent("detOperario"); }
            }

            private operario _selOperario = new operario();
            public operario selOperario
            {
                get { return _selOperario; }
                set { _selOperario = value; RaisePropertyChangedEvent("selOperario"); }
            }

            private int _numSelOperario = -1;
            public int numSelOperario
            {
                get { return _numSelOperario; }
                set
                {
                    _numSelOperario = value;
                    //validarErrorOperario();
                    RaisePropertyChangedEvent("numSelOperario");
                }
            }

            private DataTable _dtReportados = new DataTable();
            public DataTable dtReportados
            {
                get { return _dtReportados; }
                set { _dtReportados = value; RaisePropertyChangedEvent("dtReportados"); }
            }

            private Boolean _logErrorOperarios = false;
            public Boolean logErrorOperarios
            {
                get { return _logErrorOperarios; }
                set { _logErrorOperarios = value; RaisePropertyChangedEvent("logErrorOperarios"); }
            }
            
            private Boolean _logErrorOperarios2 = false;
            public Boolean logErrorOperarios2
            {
                get { return _logErrorOperarios2; }
                set { _logErrorOperarios2 = value; RaisePropertyChangedEvent("logErrorOperarios2"); }
            }

            private Boolean _logErrorTallas = false;
            public Boolean logErrorTallas
            {
                get { return _logErrorTallas; }
                set { _logErrorTallas = value; RaisePropertyChangedEvent("logErrorTallas"); }
            }

            private ObservableCollection<tallas> _listallas = new ObservableCollection<tallas>();
            public ObservableCollection<tallas> listallas
            {
                get { return _listallas; }
                set { _listallas = value; RaisePropertyChangedEvent("listallas"); }
            }

            private tallas _seltalla = new tallas();
            public tallas seltalla
            {
                get { return _seltalla; }
                set { _seltalla = value; RaisePropertyChangedEvent("seltalla"); }
            }

            private int _numseltalla = -1;
            public int numseltalla
            {
                get { return _numseltalla; }
                set
                {
                    _numseltalla = value;
                    validarErrorTallas();
                    RaisePropertyChangedEvent("numseltalla");
                }
            }

            private DataTable _dttallas = new DataTable();
            public DataTable dttallas
            {
                get { return _dttallas; }
                set { _dttallas = value; RaisePropertyChangedEvent("dttallas"); }
            }

            private BitmapImage _imagen = new BitmapImage();
            public BitmapImage imagen
            {
                get { return _imagen; }
                set { _imagen = value; RaisePropertyChangedEvent("imagen"); }
            }

            public void validarErrorOperario() 
            {
                if (!selOpcion.strPreasignado.Equals("S"))
                {
                    List<operario> lista = detOperario.ToList();
                    logErrorOperarios = lista.Exists(r => r.IsValid == false);
                    if (lista.Count == 0)
                    {
                        logErrorOperarios = true;
                    }

                    double valor = 0;
                    foreach (operario r in lista)
                    {
                        valor = valor + r.numPorcentaje;
                    }

                    if (valor == 100)
                    {
                        msn.texto = "";
                        logErrorOperarios2 = false;
                    }
                    else
                    {
                        logErrorOperarios2 = true;
                        msn.texto = "La suma del porcentaje asignado a los operarios debe ser igual a 100.";
                        msn.tipo = false;
                    }
                }
                else 
                {
                    logErrorOperarios = false;
                    logErrorOperarios2 = false;
                    msn.texto = "";
                }

            }

            public void validarErrorTallas()
            {
                List<tallas> lista = listallas.ToList();
                logErrorTallas = lista.Exists(r => r.IsValid == false);
                if (lista.Count == 0)
                {
                    logErrorTallas = true;
                }
            }

            private MDOgeneral.mensaje _msn = new MDOgeneral.mensaje();
            public MDOgeneral.mensaje msn
            {
                get { return _msn; }
                set { _msn = value; RaisePropertyChangedEvent("msn"); }

            }

            #region IDataErrorInfo Members

            string IDataErrorInfo.Error { get { return null; } }

            string IDataErrorInfo.this[string propertyName]
            {
                get { return this.GetValidationError(propertyName); }
            }

            #endregion

            #region Validation

            /// <summary>
            /// Returns true if this object has no validation errors.
            /// </summary>
            public bool IsValid
            {
                get
                {
                    foreach (string property in ValidatedProperties)
                        if (GetValidationError(property) != null)
                            return false;

                    return true;
                }
            }

            static readonly string[] ValidatedProperties = 
            { 
                "numTotalaReportar"              
            };

            string GetValidationError(string propertyName)
            {
                if (Array.IndexOf(ValidatedProperties, propertyName) < 0)
                    return null;

                string error = null;

                switch (propertyName)
                {
                    case "numTotalaReportar":
                        error = this.ValidatedTotalaReportar();
                        break;
                    default:
                        Debug.Fail("Unexpected property being validated on Customer: " + propertyName);
                        break;
                }

                return error;
            }

            string ValidatedTotalaReportar()
            {
                //validarErrorOperario();
                validarErrorTallas();

                return null;
            }


            #endregion

        }

        public class operario : ObservableObject, IDataErrorInfo
        {

            #region Propiedades
            
            private string _strOperario;
            public string strOperario
            {
                get { return _strOperario; }
                set
                {
                    _strOperario = value;
                    RaisePropertyChangedEvent("strOperario");
                    if (strOperario != null)
                    {
                        if (strOperario.Length == 5)
                        {
                            consultaOperario();
                        }
                        else//FJRF - Si no es mayor a 5 entonces hacemos lo siguiente
                        {
                            strNombreOperario = "";//FJRF - Limpiamos los datos
                            numPorcentaje = 0;//FJRF - Limpiamos los datos
                        }
                    }
                   
                }        
            }

            private string _strNombreOperario;
            public string strNombreOperario
            {
                get { return _strNombreOperario; }
                set { _strNombreOperario = value; RaisePropertyChangedEvent("strNombreOperario"); }
            }

            private double _numPorcentaje=0;
            public double numPorcentaje
            {
                get { return _numPorcentaje; }
                set { _numPorcentaje = value; RaisePropertyChangedEvent("numPorcentaje"); }
            }

            private void consultaOperario() 
            {
                try 
                {
                    DataTable dt = new produccion.AccesoDatos.ProcesoProduccionRepositorio().consultarOperario(strOperario);
                    if (dt.Rows.Count > 0)
                    {
                        strNombreOperario = dt.Rows[0]["NOMEMP_EMP"].ToString();
                        numPorcentaje = 100;//FJRF - Ponemos el valor por defecto
                    }
                    else 
                    {
                        strNombreOperario = "";
                        numPorcentaje = 0;//FJRF - Limpiamos el valor por defecto
                    }
                    RaisePropertyChangedEvent("strNombreOperario");
                }
                catch (Exception ex) { throw ex; }
            }

            #endregion

            #region IDataErrorInfo Members

            string IDataErrorInfo.Error { get { return null; } }

            string IDataErrorInfo.this[string propertyName]
            {
                get { return this.GetValidationError(propertyName); }
            }

            #endregion

            #region Validation

            /// <summary>
            /// Returns true if this object has no validation errors.
            /// </summary>
            public bool IsValid
            {
                get
                {
                    foreach (string property in ValidatedProperties)
                        if (GetValidationError(property) != null)
                            return false;

                    return true;
                }
            }

            static readonly string[] ValidatedProperties = 
            { 
                "strOperario"
            };

            string GetValidationError(string propertyName)
            {
                if (Array.IndexOf(ValidatedProperties, propertyName) < 0)
                    return null;

                string error = null;

                switch (propertyName)
                {
                    case "strOperario":
                        error = this.ValidatedstrOperario();
                        break;
                    default:
                        Debug.Fail("Unexpected property being validated on Customer: " + propertyName);
                        break;
                }

                return error;
            }

            string ValidatedstrOperario()
            {
                if (strOperario == null) 
                { 
                    return "El código de operario no existe."; 
                }
                else
                {
                    if (strOperario.Trim().Length != 5)
                        return "El operario no existe.";
                }
                
                return null;
            }

            #endregion
        }

        public class tallas : ObservableObject, IDataErrorInfo
        {
            #region Propiedades

            public ValidarTalla validarTalla;

            private Int32 _numTotal;
            public Int32 numTotal
            {
                get { return _numTotal; }
                set { _numTotal = value; RaisePropertyChangedEvent("numTotal"); }
            }

            private Int32 _numTalla1;
            public Int32 numTalla1
            {
                get { return _numTalla1; }
                set 
                { 
                    _numTalla1 = value; 
                    RaisePropertyChangedEvent("numTalla1");
                    if (numTalla1 != numTalla1c)
                        numTotal = numTalla1 + numTalla2 + numTalla3 + numTalla4 + numTalla5 + numTalla6 + numTalla7 + numTalla8 + numTalla9 + numTalla10 + numTalla11 + numTalla12 + numTalla13 + numTalla14 + numTalla15 + numTalla16 + numTalla17 + numTalla18 + numTalla19 + numTalla20;
                }
            }

            private Int32 _numTalla2;
            public Int32 numTalla2
            {
                get { return _numTalla2; }
                set 
                { 
                    _numTalla2 = value; 
                    RaisePropertyChangedEvent("numTalla2");
                    if (numTalla2 != numTalla2c)
                        numTotal = numTalla1 + numTalla2 + numTalla3 + numTalla4 + numTalla5 + numTalla6 + numTalla7 + numTalla8 + numTalla9 + numTalla10 + numTalla11 + numTalla12 + numTalla13 + numTalla14 + numTalla15 + numTalla16 + numTalla17 + numTalla18 + numTalla19 + numTalla20;
                }
            }

            private Int32 _numTalla3;
            public Int32 numTalla3
            {
                get { return _numTalla3; }
                set 
                { 
                    _numTalla3 = value; 
                    RaisePropertyChangedEvent("numTalla3");
                    if (numTalla3 != numTalla3c)
                        numTotal = numTalla1 + numTalla2 + numTalla3 + numTalla4 + numTalla5 + numTalla6 + numTalla7 + numTalla8 + numTalla9 + numTalla10 + numTalla11 + numTalla12 + numTalla13 + numTalla14 + numTalla15 + numTalla16 + numTalla17 + numTalla18 + numTalla19 + numTalla20;
                }
            }

            private Int32 _numTalla4;
            public Int32 numTalla4
            {
                get { return _numTalla4; }
                set 
                { 
                    _numTalla4 = value; 
                    RaisePropertyChangedEvent("numTalla4");
                    if (numTalla4 != numTalla4c)
                        numTotal = numTalla1 + numTalla2 + numTalla3 + numTalla4 + numTalla5 + numTalla6 + numTalla7 + numTalla8 + numTalla9 + numTalla10 + numTalla11 + numTalla12 + numTalla13 + numTalla14 + numTalla15 + numTalla16 + numTalla17 + numTalla18 + numTalla19 + numTalla20;
                }
            }

            private Int32 _numTalla5;
            public Int32 numTalla5
            {
                get { return _numTalla5; }
                set 
                { 
                    _numTalla5 = value; 
                    RaisePropertyChangedEvent("numTalla5");
                    if (numTalla5 != numTalla5c)
                        numTotal = numTalla1 + numTalla2 + numTalla3 + numTalla4 + numTalla5 + numTalla6 + numTalla7 + numTalla8 + numTalla9 + numTalla10 + numTalla11 + numTalla12 + numTalla13 + numTalla14 + numTalla15 + numTalla16 + numTalla17 + numTalla18 + numTalla19 + numTalla20;
                }
            }

            private Int32 _numTalla6;
            public Int32 numTalla6
            {
                get { return _numTalla6; }
                set 
                { 
                    _numTalla6 = value; 
                    RaisePropertyChangedEvent("numTalla6");
                    if (numTalla6 != numTalla6c)
                        numTotal = numTalla1 + numTalla2 + numTalla3 + numTalla4 + numTalla5 + numTalla6 + numTalla7 + numTalla8 + numTalla9 + numTalla10 + numTalla11 + numTalla12 + numTalla13 + numTalla14 + numTalla15 + numTalla16 + numTalla17 + numTalla18 + numTalla19 + numTalla20;
                }
            }

            private Int32 _numTalla7;
            public Int32 numTalla7
            {
                get { return _numTalla7; }
                set 
                { 
                    _numTalla7 = value; 
                    RaisePropertyChangedEvent("numTalla7");
                    if (numTalla7 != numTalla7c)
                        numTotal = numTalla1 + numTalla2 + numTalla3 + numTalla4 + numTalla5 + numTalla6 + numTalla7 + numTalla8 + numTalla9 + numTalla10 + numTalla11 + numTalla12 + numTalla13 + numTalla14 + numTalla15 + numTalla16 + numTalla17 + numTalla18 + numTalla19 + numTalla20;
                }
            }

            private Int32 _numTalla8;
            public Int32 numTalla8
            {
                get { return _numTalla8; }
                set 
                { 
                    _numTalla8 = value; 
                    RaisePropertyChangedEvent("numTalla8");
                    if (numTalla8 != numTalla8c)
                        numTotal = numTalla1 + numTalla2 + numTalla3 + numTalla4 + numTalla5 + numTalla6 + numTalla7 + numTalla8 + numTalla9 + numTalla10 + numTalla11 + numTalla12 + numTalla13 + numTalla14 + numTalla15 + numTalla16 + numTalla17 + numTalla18 + numTalla19 + numTalla20;
                }
            }

            private Int32 _numTalla9;
            public Int32 numTalla9
            {
                get { return _numTalla9; }
                set 
                { 
                    _numTalla9 = value; 
                    RaisePropertyChangedEvent("numTalla9");
                    if (numTalla9 != numTalla9c)
                        numTotal = numTalla1 + numTalla2 + numTalla3 + numTalla4 + numTalla5 + numTalla6 + numTalla7 + numTalla8 + numTalla9 + numTalla10 + numTalla11 + numTalla12 + numTalla13 + numTalla14 + numTalla15 + numTalla16 + numTalla17 + numTalla18 + numTalla19 + numTalla20;
                }
            }

            private Int32 _numTalla10;
            public Int32 numTalla10
            {
                get { return _numTalla10; }
                set 
                { 
                    _numTalla10 = value; 
                    RaisePropertyChangedEvent("numTalla10");
                    if (numTalla10 != numTalla10c)
                        numTotal = numTalla1 + numTalla2 + numTalla3 + numTalla4 + numTalla5 + numTalla6 + numTalla7 + numTalla8 + numTalla9 + numTalla10 + numTalla11 + numTalla12 + numTalla13 + numTalla14 + numTalla15 + numTalla16 + numTalla17 + numTalla18 + numTalla19 + numTalla20;
                }
            }

            private Int32 _numTalla11;
            public Int32 numTalla11
            {
                get { return _numTalla11; }
                set
                {
                    _numTalla11 = value;
                    RaisePropertyChangedEvent("numTalla11");
                    if (numTalla11 != numTalla11c)
                        numTotal = numTalla1 + numTalla2 + numTalla3 + numTalla4 + numTalla5 + numTalla6 + numTalla7 + numTalla8 + numTalla9 + numTalla10 + numTalla11 + numTalla12 + numTalla13 + numTalla14 + numTalla15 + numTalla16 + numTalla17 + numTalla18 + numTalla19 + numTalla20;
                }
            }

            private Int32 _numTalla12;
            public Int32 numTalla12
            {
                get { return _numTalla12; }
                set
                {
                    _numTalla12 = value;
                    RaisePropertyChangedEvent("numTalla12");
                    if (numTalla12 != numTalla12c)
                        numTotal = numTalla1 + numTalla2 + numTalla3 + numTalla4 + numTalla5 + numTalla6 + numTalla7 + numTalla8 + numTalla9 + numTalla10 + numTalla11 + numTalla12 + numTalla13 + numTalla14 + numTalla15 + numTalla16 + numTalla17 + numTalla18 + numTalla19 + numTalla20;
                }
            }

            private Int32 _numTalla13;
            public Int32 numTalla13
            {
                get { return _numTalla13; }
                set
                {
                    _numTalla13 = value;
                    RaisePropertyChangedEvent("numTalla13");
                    if (numTalla13 != numTalla13c)
                        numTotal = numTalla1 + numTalla2 + numTalla3 + numTalla4 + numTalla5 + numTalla6 + numTalla7 + numTalla8 + numTalla9 + numTalla10 + numTalla11 + numTalla12 + numTalla13 + numTalla14 + numTalla15 + numTalla16 + numTalla17 + numTalla18 + numTalla19 + numTalla20;
                }
            }

            private Int32 _numTalla14;
            public Int32 numTalla14
            {
                get { return _numTalla14; }
                set
                {
                    _numTalla14 = value;
                    RaisePropertyChangedEvent("numTalla14");
                    if (numTalla14 != numTalla14c)
                        numTotal = numTalla1 + numTalla2 + numTalla3 + numTalla4 + numTalla5 + numTalla6 + numTalla7 + numTalla8 + numTalla9 + numTalla10 + numTalla11 + numTalla12 + numTalla13 + numTalla14 + numTalla15 + numTalla16 + numTalla17 + numTalla18 + numTalla19 + numTalla20;
                }
            }

            private Int32 _numTalla15;
            public Int32 numTalla15
            {
                get { return _numTalla15; }
                set
                {
                    _numTalla15 = value;
                    RaisePropertyChangedEvent("numTalla15");
                    if (numTalla15 != numTalla15c)
                        numTotal = numTalla1 + numTalla2 + numTalla3 + numTalla4 + numTalla5 + numTalla6 + numTalla7 + numTalla8 + numTalla9 + numTalla10 + numTalla11 + numTalla12 + numTalla13 + numTalla14 + numTalla15 + numTalla16 + numTalla17 + numTalla18 + numTalla19 + numTalla20;
                }
            }

            private Int32 _numTalla16;
            public Int32 numTalla16
            {
                get { return _numTalla16; }
                set
                {
                    _numTalla16 = value;
                    RaisePropertyChangedEvent("numTalla16");
                    if (numTalla16 != numTalla16c)
                        numTotal = numTalla1 + numTalla2 + numTalla3 + numTalla4 + numTalla5 + numTalla6 + numTalla7 + numTalla8 + numTalla9 + numTalla10 + numTalla11 + numTalla12 + numTalla13 + numTalla14 + numTalla15 + numTalla16 + numTalla17 + numTalla18 + numTalla19 + numTalla20;
                }
            }

            private Int32 _numTalla17;
            public Int32 numTalla17
            {
                get { return _numTalla17; }
                set
                {
                    _numTalla17 = value;
                    RaisePropertyChangedEvent("numTalla17");
                    if (numTalla17 != numTalla17c)
                        numTotal = numTalla1 + numTalla2 + numTalla3 + numTalla4 + numTalla5 + numTalla6 + numTalla7 + numTalla8 + numTalla9 + numTalla10 + numTalla11 + numTalla12 + numTalla13 + numTalla14 + numTalla15 + numTalla16 + numTalla17 + numTalla18 + numTalla19 + numTalla20;
                }
            }

            private Int32 _numTalla18;
            public Int32 numTalla18
            {
                get { return _numTalla18; }
                set
                {
                    _numTalla18 = value;
                    RaisePropertyChangedEvent("numTalla18");
                    if (numTalla18 != numTalla18c)
                        numTotal = numTalla1 + numTalla2 + numTalla3 + numTalla4 + numTalla5 + numTalla6 + numTalla7 + numTalla8 + numTalla9 + numTalla10 + numTalla11 + numTalla12 + numTalla13 + numTalla14 + numTalla15 + numTalla16 + numTalla17 + numTalla18 + numTalla19 + numTalla20;
                }
            }

            private Int32 _numTalla19;
            public Int32 numTalla19
            {
                get { return _numTalla19; }
                set
                {
                    _numTalla19 = value;
                    RaisePropertyChangedEvent("numTalla19");
                    if (numTalla19 != numTalla19c)
                        numTotal = numTalla1 + numTalla2 + numTalla3 + numTalla4 + numTalla5 + numTalla6 + numTalla7 + numTalla8 + numTalla9 + numTalla10 + numTalla11 + numTalla12 + numTalla13 + numTalla14 + numTalla15 + numTalla16 + numTalla17 + numTalla18 + numTalla19 + numTalla20;
                }
            }

            private Int32 _numTalla20;
            public Int32 numTalla20
            {
                get { return _numTalla20; }
                set
                {
                    _numTalla20 = value;
                    RaisePropertyChangedEvent("numTalla20");
                    if (numTalla20 != numTalla20c)
                        numTotal = numTalla1 + numTalla2 + numTalla3 + numTalla4 + numTalla5 + numTalla6 + numTalla7 + numTalla8 + numTalla9 + numTalla10 + numTalla11 + numTalla12 + numTalla13 + numTalla14 + numTalla15 + numTalla16 + numTalla17 + numTalla18 + numTalla19 + numTalla20;
                }
            }

            private Int32 _numTalla1c;
            public Int32 numTalla1c
            {
                get { return _numTalla1c; }
                set { _numTalla1c = value; RaisePropertyChangedEvent("numTalla1c"); }
            }

            private Int32 _numTalla2c;
            public Int32 numTalla2c
            {
                get { return _numTalla2c; }
                set { _numTalla2c = value; RaisePropertyChangedEvent("numTalla2c"); }
            }

            private Int32 _numTalla3c;
            public Int32 numTalla3c
            {
                get { return _numTalla3c; }
                set { _numTalla3c = value; RaisePropertyChangedEvent("numTalla3c"); }
            }

            private Int32 _numTalla4c;
            public Int32 numTalla4c
            {
                get { return _numTalla4c; }
                set { _numTalla4c = value; RaisePropertyChangedEvent("numTalla4c"); }
            }

            private Int32 _numTalla5c;
            public Int32 numTalla5c
            {
                get { return _numTalla5c; }
                set { _numTalla5c = value; RaisePropertyChangedEvent("numTalla5c"); }
            }

            private Int32 _numTalla6c;
            public Int32 numTalla6c
            {
                get { return _numTalla6c; }
                set { _numTalla6c = value; RaisePropertyChangedEvent("numTalla6c"); }
            }

            private Int32 _numTalla7c;
            public Int32 numTalla7c
            {
                get { return _numTalla7c; }
                set { _numTalla7c = value; RaisePropertyChangedEvent("numTalla7c"); }
            }

            private Int32 _numTalla8c;
            public Int32 numTalla8c
            {
                get { return _numTalla8c; }
                set { _numTalla8c = value; RaisePropertyChangedEvent("numTalla8c"); }
            }

            private Int32 _numTalla9c;
            public Int32 numTalla9c
            {
                get { return _numTalla9c; }
                set { _numTalla9c = value; RaisePropertyChangedEvent("numTalla9c"); }
            }

            private Int32 _numTalla10c;
            public Int32 numTalla10c
            {
                get { return _numTalla10c; }
                set { _numTalla10c = value; RaisePropertyChangedEvent("numTalla10c"); }
            }

            private Int32 _numTalla11c;
            public Int32 numTalla11c
            {
                get { return _numTalla11c; }
                set { _numTalla11c = value; RaisePropertyChangedEvent("numTalla11c"); }
            }

            private Int32 _numTalla12c;
            public Int32 numTalla12c
            {
                get { return _numTalla12c; }
                set { _numTalla12c = value; RaisePropertyChangedEvent("numTalla12c"); }
            }

            private Int32 _numTalla13c;
            public Int32 numTalla13c
            {
                get { return _numTalla13c; }
                set { _numTalla13c = value; RaisePropertyChangedEvent("numTalla13c"); }
            }

            private Int32 _numTalla14c;
            public Int32 numTalla14c
            {
                get { return _numTalla14c; }
                set { _numTalla14c = value; RaisePropertyChangedEvent("numTalla14c"); }
            }

            private Int32 _numTalla15c;
            public Int32 numTalla15c
            {
                get { return _numTalla15c; }
                set { _numTalla15c = value; RaisePropertyChangedEvent("numTalla15c"); }
            }

            private Int32 _numTalla16c;
            public Int32 numTalla16c
            {
                get { return _numTalla16c; }
                set { _numTalla16c = value; RaisePropertyChangedEvent("numTalla16c"); }
            }

            private Int32 _numTalla17c;
            public Int32 numTalla17c
            {
                get { return _numTalla17c; }
                set { _numTalla17c = value; RaisePropertyChangedEvent("numTalla17c"); }
            }

            private Int32 _numTalla18c;
            public Int32 numTalla18c
            {
                get { return _numTalla18c; }
                set { _numTalla18c = value; RaisePropertyChangedEvent("numTalla18c"); }
            }

            private Int32 _numTalla19c;
            public Int32 numTalla19c
            {
                get { return _numTalla19c; }
                set { _numTalla19c = value; RaisePropertyChangedEvent("numTalla19c"); }
            }

            private Int32 _numTalla20c;
            public Int32 numTalla20c
            {
                get { return _numTalla20c; }
                set { _numTalla20c = value; RaisePropertyChangedEvent("numTalla20c"); }
            }

            #endregion

            #region Metodos
            public delegate string ValidarTalla(string strTalla);
            #endregion

            #region IDataErrorInfo Members

            string IDataErrorInfo.Error { get { return null; } }

            string IDataErrorInfo.this[string propertyName]
            {
                get { return this.GetValidationError(propertyName); }
            }

            #endregion

            #region Validation

            /// <summary>
            /// Returns true if this object has no validation errors.
            /// </summary>
            public bool IsValid
            {
                get
                {
                    foreach (string property in ValidatedProperties)
                        if (GetValidationError(property) != null)
                            return false;

                    return true;
                }
            }

            static readonly string[] ValidatedProperties = 
            { 
                "numTalla1",
                "numTalla2",
                "numTalla3",
                "numTalla4",
                "numTalla5",
                "numTalla6",
                "numTalla7",
                "numTalla8",
                "numTalla9",
                "numTalla10",
                "numTalla11",
                "numTalla12",
                "numTalla13",
                "numTalla14",
                "numTalla15",
                "numTalla16",
                "numTalla17",
                "numTalla18",
                "numTalla19",
                "numTalla20"  
            };

            string GetValidationError(string propertyName)
            {
                if (Array.IndexOf(ValidatedProperties, propertyName) < 0)
                    return null;

                string error = null;

                switch (propertyName)
                {
                    case "numTalla1":
                        error = this.Validatedtalla1();
                        break;
                    case "numTalla2":
                        error = this.Validatedtalla2();
                        break;
                    case "numTalla3":
                        error = this.Validatedtalla3();
                        break;
                    case "numTalla4":
                        error = this.Validatedtalla4();
                        break;
                    case "numTalla5":
                        error = this.Validatedtalla5();
                        break;
                    case "numTalla6":
                        error = this.Validatedtalla6();
                        break;
                    case "numTalla7":
                        error = this.Validatedtalla7();
                        break;
                    case "numTalla8":
                        error = this.Validatedtalla8();
                        break;
                    case "numTalla9":
                        error = this.Validatedtalla9();
                        break;
                    case "numTalla10":
                        error = this.Validatedtalla10();
                        break;
                    case "numTalla11":
                        error = this.Validatedtalla11();
                        break;
                    case "numTalla12":
                        error = this.Validatedtalla12();
                        break;
                    case "numTalla13":
                        error = this.Validatedtalla13();
                        break;
                    case "numTalla14":
                        error = this.Validatedtalla14();
                        break;
                    case "numTalla15":
                        error = this.Validatedtalla15();
                        break;
                    case "numTalla16":
                        error = this.Validatedtalla16();
                        break;
                    case "numTalla17":
                        error = this.Validatedtalla17();
                        break;
                    case "numTalla18":
                        error = this.Validatedtalla18();
                        break;
                    case "numTalla19":
                        error = this.Validatedtalla19();
                        break;
                    case "numTalla20":
                        error = this.Validatedtalla20();
                        break;
                    default:
                        Debug.Fail("Unexpected property being validated on Customer: " + propertyName);
                        break;
                }

                return error;
            }

            string Validatedtalla1()
            {
                if (_numTalla1 > 0)
                {
                    if (_numTalla1 > _numTalla1c)
                        return "La Cantidad no puede ser mayor que " + _numTalla1c;
                }
                else
                {
                    if (_numTalla1 < 0)
                        return "No se puede reportar una cantidad negativa.";
                }
                return null;
            }

            string Validatedtalla2()
            {
                if (_numTalla2 > 0)
                {
                    if (_numTalla2 > _numTalla2c)
                        return "La Cantidad no puede ser mayor que " + _numTalla2c;
                }
                else
                {
                    if (_numTalla2 < 0)
                        return "No se puede reportar una cantidad negativa.";
                }
                return null;
            }

            string Validatedtalla3()
            {
                if (_numTalla3 > 0)
                {
                    if (_numTalla3 > _numTalla3c)
                        return "La Cantidad no puede ser mayor que " + _numTalla3c;
                }
                else
                {
                    if (_numTalla3 < 0)
                        return "No se puede reportar una cantidad negativa.";
                }
                return null;
            }

            string Validatedtalla4()
            {
                if (_numTalla4 > 0)
                {
                    if (_numTalla4 > _numTalla4c)
                        return "La Cantidad no puede ser mayor que " + _numTalla4c;
                }
                else
                {
                    if (_numTalla4 < 0)
                        return "No se puede reportar una cantidad negativa.";
                }
                return null;
            }

            string Validatedtalla5()
            {
                if (_numTalla5 > 0)
                {
                    if (_numTalla5 > _numTalla5c)
                        return "La Cantidad no puede ser mayor que " + _numTalla5c;
                }
                else
                {
                    if (_numTalla5 < 0)
                        return "No se puede reportar una cantidad negativa.";
                }
                return null;
            }

            string Validatedtalla6()
            {
                if (_numTalla6 > 0)
                {
                    if (_numTalla6 > _numTalla6c)
                        return "La Cantidad no puede ser mayor que " + _numTalla6c;
                }
                else
                {
                    if (_numTalla6 < 0)
                        return "No se puede reportar una cantidad negativa.";
                }
                return null;
            }

            string Validatedtalla7()
            {
                if (_numTalla7 > 0)
                {
                    if (_numTalla7 > _numTalla7c)
                        return "La Cantidad no puede ser mayor que " + _numTalla7c;
                }
                else
                {
                    if (_numTalla7 < 0)
                        return "No se puede reportar una cantidad negativa.";
                }
                return null;
            }

            string Validatedtalla8()
            {
                if (_numTalla8 > 0)
                {
                    if (_numTalla8 > _numTalla8c)
                        return "La Cantidad no puede ser mayor que " + _numTalla8c;
                }
                else
                {
                    if (_numTalla8 < 0)
                        return "No se puede reportar una cantidad negativa.";
                }
                return null;
            }

            string Validatedtalla9()
            {
                if (_numTalla9 > 0)
                {
                    if (_numTalla9 > _numTalla9c)
                        return "La Cantidad no puede ser mayor que " + _numTalla9c;
                }
                else
                {
                    if (_numTalla9 < 0)
                        return "No se puede reportar una cantidad negativa.";
                }
                return null;
            }

            string Validatedtalla10()
            {
                if (_numTalla10 > 0)
                {
                    if (_numTalla10 > _numTalla10c)
                        return "La Cantidad no puede ser mayor que " + _numTalla10c;
                }
                else
                {
                    if (_numTalla10 < 0)
                        return "No se puede reportar una cantidad negativa.";
                }
                return null;
            }

            string Validatedtalla11()
            {
                if (_numTalla11 > 0)
                {
                    if (_numTalla11 > _numTalla11c)
                        return "La Cantidad no puede ser mayor que " + _numTalla11c;
                }
                else
                {
                    if (_numTalla11 < 0)
                        return "No se puede reportar una cantidad negativa.";
                }
                return null;
            }

            string Validatedtalla12()
            {
                if (_numTalla12 > 0)
                {
                    if (_numTalla12 > _numTalla12c)
                        return "La Cantidad no puede ser mayor que " + _numTalla12c;
                }
                else
                {
                    if (_numTalla12 < 0)
                        return "No se puede reportar una cantidad negativa.";
                }
                return null;
            }

            string Validatedtalla13()
            {
                if (_numTalla13 > 0)
                {
                    if (_numTalla13 > _numTalla13c)
                        return "La Cantidad no puede ser mayor que " + _numTalla13c;
                }
                else
                {
                    if (_numTalla13 < 0)
                        return "No se puede reportar una cantidad negativa.";
                }
                return null;
            }

            string Validatedtalla14()
            {
                if (_numTalla14 > 0)
                {
                    if (_numTalla14 > _numTalla14c)
                        return "La Cantidad no puede ser mayor que " + _numTalla14c;
                }
                else
                {
                    if (_numTalla14 < 0)
                        return "No se puede reportar una cantidad negativa.";
                }
                return null;
            }

            string Validatedtalla15()
            {
                if (_numTalla15 > 0)
                {
                    if (_numTalla15 > _numTalla15c)
                        return "La Cantidad no puede ser mayor que " + _numTalla15c;
                }
                else
                {
                    if (_numTalla15 < 0)
                        return "No se puede reportar una cantidad negativa.";
                }
                return null;
            }

            string Validatedtalla16()
            {
                if (_numTalla16 > 0)
                {
                    if (_numTalla16 > _numTalla16c)
                        return "La Cantidad no puede ser mayor que " + _numTalla16c;
                }
                else
                {
                    if (_numTalla16 < 0)
                        return "No se puede reportar una cantidad negativa.";
                }
                return null;
            }

            string Validatedtalla17()
            {
                if (_numTalla17 > 0)
                {
                    if (_numTalla17 > _numTalla17c)
                        return "La Cantidad no puede ser mayor que " + _numTalla17c;
                }
                else
                {
                    if (_numTalla17 < 0)
                        return "No se puede reportar una cantidad negativa.";
                }
                return null;
            }

            string Validatedtalla18()
            {
                if (_numTalla18 > 0)
                {
                    if (_numTalla18 > _numTalla18c)
                        return "La Cantidad no puede ser mayor que " + _numTalla18c;
                }
                else
                {
                    if (_numTalla18 < 0)
                        return "No se puede reportar una cantidad negativa.";
                }
                return null;
            }

            string Validatedtalla19()
            {
                if (_numTalla19 > 0)
                {
                    if (_numTalla19 > _numTalla19c)
                        return "La Cantidad no puede ser mayor que " + _numTalla19c;
                }
                else
                {
                    if (_numTalla19 < 0)
                        return "No se puede reportar una cantidad negativa.";
                }
                return null;
            }

            string Validatedtalla20()
            {
                if (_numTalla20 > 0)
                {
                    if (_numTalla20 > _numTalla20c)
                        return "La Cantidad no puede ser mayor que " + _numTalla20c;
                }
                else
                {
                    if (_numTalla20 < 0)
                        return "No se puede reportar una cantidad negativa.";
                }
                return null;
            }

            #endregion

        }
    }


}
